package indi.service;

import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;


import indi.DAO.Dao;
import indi.entity.*;
import indi.entity.Record;

/**
 * 书籍管理的抽象类，可以派生出图书管理类、杂志管理类
 * 集成书籍该有的公用方法。
 */
public class TitleService {
	//借书保存时间
	public static int MAINTAINDAYS = 31;
	//借书上限
	public static int UPPERLIMIT = 3;
	//累计书籍个数
	static int COUNTOFTitle;
	//当前借书记录管理者
	//protected RecordManager currentRcdMng;
	//当前借阅证管理者
	//protected LiscenceManager currentLscMng;
	// 书籍列表
	ArrayList<Title> currentTitles = null;
	// 时间段内新增书籍，便于分类
	ArrayList<Title> currentAddedTitles = null;
	/*
	// 当前书本列表
	ArrayList<Book> currentBooks = null;
	// 当前杂志列表
	ArrayList<Magazine> currentMagazines = null;
	*/
	
	public TitleService(){
		super();
		this.currentTitles = new ArrayList<>();
		//this.currentRcdMng = new RecordManager();
		//this.currentLscMng = new LiscenceManager();
		//this.currentBooks = new ArrayList<>();
		//this.currentMagazines = new ArrayList<>();
	}
	
	public static void menu() {
		System.out.println("1 添加书籍");
		System.out.println("2 删除书籍");
		System.out.println("3 删除书籍(s)");
		System.out.println("4 更新书籍");
		System.out.println("5 查询书籍(书名)");
		System.out.println("6 查询书籍(ISBN)");
		System.out.println("7 查询书籍(图书馆号)");
		System.out.println("8 添加关联");
		System.out.println("9 删除关联");
		System.out.println("10.显示当前馆藏信息");
//		System.out.println("1 添加书籍");
//		System.out.println("1 添加书籍");
		
	}
	
	//书籍信息保存到数据库，参数是集合ArrayList<书籍>
	public boolean saveTitlesToDB(ArrayList<Title> titles) {
		Dao db = new Dao();
		
		try{
			// 获取数据库链接
				db.connectToDatabase();
				for (Title t : titles) {
					// 保存匹配记录中的登录日志
					String sql = ;//修改"INSERT INTO gather_logrec(id,time,address,type,username,ip,logtype) VALUES(?,?,?,?,?,?,?)";
					Object[] param = new Object[] {};/*参数修改{ null,
							new Timestamp(title.getTime().getTime()),
							login.getAddress(), login.getType(), login.getUser(),
							login.getIp(), login.getLogType() };*/
					db.update(sql, param);
					/* 获取最后一行ID,不一定需要
					ResultSet rs = db.query("SELECT LAST_INSERT_ID()", null);
					int loginKey = 0;
					if(rs.next())
						loginKey = rs.getInt(1);
					t.setId(loginKey);
					*/
				}
				// 关闭数据库连接，释放资源
				db.closeAll();
		}catch(Exception e){
			throw e;
		}
	}
	
	// 从数据库读取书籍信息，返回书籍集合
	public ArrayList<Title> readTitlesFromDB(){
		//ArrayList<Title> titlesInDB = new ArrayList<>();
		Dao db = new Dao();
		
		try{
			//获取数据库连接
			db.connectToDatabase();
			//查询所以书籍信息
			String sql= "";//参照下写
					/*"SELECT i.id, i.time, i.address, i.type, i.username, i.ip, i.logtype,"
					+"o.id, o.time, o.address, o.type, o.username, o.ip, o.logtype "
					+"FROM matched_logrec m, gather_logrec i, gather_logrec o "
					+"WHERE m.loginid = i.id AND m.logoutid = o.id";*/
			ResultSet rs = db.query(sql, null);
			while(rs.next()){
				// 获取一行书本信息
				Title oneTitle = new Title(rs.getInt(1)...);// 待补充
				// 加入书本列表
				currentTitles.add(oneTitle);
			}
			//关闭数据库连接，释放资源
			db.closeAll();
		}catch(Exception e){
			e.printStackTrace();
		}
		//返回匹配日志信息集合
		return currentTitles;
	}
	
	// 添加书籍，同时添加到书本列表
	public boolean addTitles(ArrayList<Title> titles) {
		try {
			// 添加到当前书籍
			currentTitles.addAll(titles);
			return true;
		}catch(Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}
	
	// 通过ISBN号删除书籍
	public boolean removeTitles(String isbn) {
		
		try {
			for(Title e: currentTitles) {
				if(e.getISBN().equals(isbn)) {
					currentTitles.remove(e);
					return true;
				}
			}
		}catch(Exception ex) {
			ex.printStackTrace();
		}
		return false;
	}

	// 通过图书馆自带的号码删除书籍
	public boolean removeTitle(String idOfLibrary) {
		return false;
	}
	
	
	
	// 根据书名查找书籍
	public ArrayList<Title> queryTitles(String name) {
		ArrayList<Title> titlesToQuery = new ArrayList<>();
		
		return titlesToQuery;
	}
	
	// 根据ISBN号查找书籍
	public Title queryTitleByISBN(String isbn) {
		
		for(Title e: currentTitles) {// 改进
			if(e.getISBN().equals(isbn)) {
				return e;
			}
		}
		return null;
	}
	
	// 根据图书馆号查找书籍
	public ArrayList<Title> queryTitleByIDOfLibrary(String idOfL) {
		ArrayList<Title> titlesToQuery = new ArrayList<>();
		
		return titlesToQuery;
	}
	
	// 修改书籍。待完善
	public boolean updateTitle(Title title, String newAuthor, String newBookName, 
		String newType, String newIsbn) throws Exception{
	Title copyTitle = null;
	try {
		//备份书本数据
		copyTitle = new Title(title);
		//更新书本信息
		title.setAuthor(newAuthor);
		title.setBookName(newBookName);
		title.setType(newType);
		title.setISBN(newIsbn);
		// 怎样解决不同类型设置保存日期
		title.setMaintainPeriod(this.MAINTAINDAYS);
		return true;
	}catch(Exception e) {
		title.setAll(copyTitle);
		e.printStackTrace();
	}
		return false;
	}
	
	// 返回是否在馆列，不实现
	
	// 添加书籍与借阅记录的关联
	public boolean addRelatedRecord(Title title, Record newRecord) {
		title.setCurrentRecord(newRecord);
		title.setInLibrary(false);
		title.setCountOfBorrowed(title.getCountOfBorrowed()+1);
		return true;
	}
	// 解除书籍与借阅记录的关联
	public boolean deRelatedRecord(Title title) {
		title.setCurrentRecord(null);
		title.setInLibrary(true);
		return true;
	}

	/**
	 * @return the currentTitles
	 */
	public ArrayList<Title> getCurrentTitles() {
		return currentTitles;
	}

	public void outputTitles(ArrayList<Title> titles) {
		for(Title e: titles) {
			System.out.println(e.toString());
		}
	}
	

	/*
	//根据ISBN查找书籍
	public Title getTitle(String ISBN){
		String sql="SELECT * FROM title WHERE ISBN='"+ISBN+"'";
		Title t=dao.getTitle(sql);
		return t;
	}
	//借书时将图书的借阅次数加1，已借出数加1,在馆数减1
	public boolean addNum(String ISBN){
		String sql="UPDATE title SET borrowedNum=borrowedNum+1,countOfBorrow=countOfBorrow+1, totalNum=totalNum-1 WHERE ISBN='"+ISBN+"'";
		return dao.addNum(sql);
	}

	//获取该种图书所能借阅的时长
	public int queryPeriod(String type){
		String sql="SELECT period FROM booktype WHERE type='"+type+"'";
		return  dao.queryPeriod(sql);
	}
	*/
	// 过滤方法，过滤书籍中的书本、杂志。注意，应该调用子服务类的过滤方法，这里可以不要
	
	// 返回当前书籍，getter
	 
}